$.fn.category = function(config) {
    /**
     * config = {c2:c2,c3:c3,params:params}
     */
    var data;
    if (window._gdata) {
        data = window._gdata;
    }
    var fn = this;
    var params = config.params;
    var init = function() {
        $.ajax({
            url: '/Ajax/Category/getAll',
            type: 'get',
            dataType: 'json',
            success: function(d) {
                window._gdata = data = d.data;
            }
        });
        if (!data) {
            return;
        }
    }

    var insertHtml = function() {
        var defaultOne = getDefaultValue(fn);
        var defaultTwo = getDefaultValue(config.c2);
        var defaultThree = getDefaultValue(config.c3);
        // 选择后的值.
        var valOne, valTwo, valThree, isMaster;
        if (params && params.list) {
            var first = params.list.shift();
            if (first) {
                valOne = first.c1;
                valTwo = first.c2;
                valThree = first.c3 + '_' + first.sort;
                isMaster = first.isMaster;
                fn.parents('.js-condition-tr').find('input[name*="isMaster"]').attr('checked', isMaster ? true : false);
            }
        }
        fn.bind('change', function() {
            var v = $(this).val();
            if (v) {
                var json = data[v].List;
                getHtml(config.c2, json, defaultTwo, false, valTwo);
            } else {
                defaultValue(config.c2, defaultTwo);
            }
            defaultValue(config.c3, defaultThree);
        });
        config.c2.bind('change', function() {
            var v = $(this).val();
            if (v) {
                $.ajax({
                    url: '/Ajax/Category/getLevel',
                    data: {id: v},
                    dataType: 'json',
                    success: function(d) {
                        getHtml(config.c3, d.data, defaultThree, true, valThree);
                    }
                });
            } else {
                defaultValue(config.c3, defaultThree);
            }
        });
        getHtml(fn, data, defaultOne, false, valOne);
    }

    var defaultValue = function(obj, def) {
        var str = '<option value="">' + def + '</option>';
        obj.html(str);
        obj.attr('disabled', true).addClass('disabled');
    }

    var getHtml = function(obj, data, def, isLevel, val) {
        var str = '<option value="">' + def + '</option>';
        var len = data.length;
        if (len === 1) {
            str = '';
        }
        for (var i in data) {
            var json = data[i];
            if (isLevel) {
                var v = json.LevelId + '_' + json.Sort;
                str += '<option value="' + v + '">' + json.Name + '</option>';
            } else {
                var v = json.CategoryId;
                str += '<option value="' + v + '">' + json.CategoryName + '</option>';
            }
        }
        obj.html(str);
        obj.attr('disabled', false).removeClass('disabled');
        obj.find('option[value="' + val + '"]').attr('selected', true).change();
    }

    var getDefaultValue = function(obj) {
        var val = obj.find('option').eq(0).html();
        return val;
    }

    var defaultAdd = function() {
        if (!params) {
            return;
        }
        var form = $('#js-search-from');
        if (params.isSc) {
            form.find('input[name="isSc"]').attr('checked', true);
        } else {
            form.find('input[name="isSc"]').attr('checked', false);
        }
        if (params.isNoSc) {
            form.find('input[name="isNoSc"]').attr('checked', true);
        } else {
            form.find('input[name="isNoSc"]').attr('checked', false);
        }
        if (params.isLibraries) {
            form.find('input[name="isLibraries"]').attr('checked', true);
        } else {
            form.find('input[name="isLibraries"]').attr('checked', false);
        }
        if (params.isDel) {
            form.find('input[name="isDel"]').attr('checked', true);
        } else {
            form.find('input[name="isDel"]').attr('checked', false);
        }
    }

    if (!data) {
        init();
    }
    var initInerval = setInterval(function(){
        if (data) {
            insertHtml();
            defaultAdd();
            clearInterval(initInerval);
        }
    }, 300)
}

